import java.util.*;
public class Main {
    /**
     * 前缀和复习（二维前缀和）
     * @param args
     */
    public static void main(String[] args) {
        Scanner in=new Scanner(System.in);
        int n=in.nextInt(),m=in.nextInt(),q=in.nextInt();
        long[][] arr=new long[n+1][m+1];
        long[][] dp=new long[n+1][m+1];
        for(int i=1;i<=n;i++){
            for(int j=1;j<=m;j++){
                arr[i][j]=in.nextLong();
                dp[i][j]=dp[i-1][j]+dp[i][j-1]-dp[i-1][j-1]+arr[i][j];
            }
        }
        while(q-->0){
            int x1=in.nextInt(),y1=in.nextInt(),x2=in.nextInt(),y2=in.nextInt();
            long res=dp[x2][y2]-dp[x1-1][y2]-dp[x2][y1-1]+dp[x1-1][y1-1];
            System.out.println(res);
        }
    }

    /**
     * 寻找数组的中心下标
     * @param nums
     * @return
     */
    public static int pivotIndex(int[] nums) {
        int n = nums.length;
        int[] f = new int[n];
        int[] g = new int[n];
        for (int i = 1; i < n; i++) {
            f[i] = f[i - 1] + nums[i - 1];
        }
        for (int i = n - 2; i >= 0; i--) {
            g[i] = g[i + 1] + nums[i + 1];
        }
        for (int i = 0; i < n; i++) {
            if (f[i] == g[i]) {
                return i;
            }
        }
        return -1;
    }

    /**
     * 字母异位词分组
     * @param strs
     * @return
     */
    public static List<List<String>> groupAnagrams(String[] strs) {
        Map<String,List<String>> hash=new HashMap<>();
        int n=strs.length;
        for(int i=0;i<n;i++){
            char[] ch=strs[i].toCharArray();
            Arrays.sort(ch);
            String str=new String(ch);
            if(!hash.containsKey(str)){
                hash.put(str,new ArrayList());
            }
            hash.get(str).add(strs[i]);
        }
        return new ArrayList(hash.values());
    }

    /**
     * 最长公共前缀
     * @param strs
     * @return
     */
    public static String longestCommonPrefix(String[] strs) {
        int n=strs.length;
        int min=strs[0].length();
        for(int i=1;i<n;i++){
            if(strs[i].length()<min){
                min=strs[i].length();
            }
        }
        for(int i=0;i<min;i++){
            char tmp=strs[0].charAt(i);
            for(int j=1;j<n;j++){
                if(strs[j].charAt(i)!=tmp||i==strs[j].length()){
                    return strs[0].substring(0,i);
                }
            }
        }
        return strs[0];
    }
    //方法一
    //     StringBuilder res=new StringBuilder();
    //     int min=strs[0].length();
    //     for(int i=1;i<strs.length;i++){
    //         if(min>strs[i].length()){
    //             min=strs[i].length();
    //         }
    //     }
    //     boolean flg=true;
    //     for(int i=0;i<min;i++){
    //         if(func(strs,i)&&flg){
    //             res.append(strs[0].charAt(i));
    //         }else{
    //             flg=false;
    //         }
    //     }
    //     return res.toString();
    // }
    // public static boolean func(String[] strs,int i){
    //     char ch=strs[0].charAt(i);
    //     for(int j=1;j<strs.length;j++){
    //         if(ch!=strs[j].charAt(i)){
    //             return false;
    //         }
    //     }
    //     return true;
    // }

}